﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Specialized;
using System.Collections.Generic;
using DataBaseManager;
using Utilities.Common;
using BL.DataAccess;

namespace BL.Entities
{
    public partial class ColeccionIntervenciones : List<Intervenciones>
    {
        //  Agregue su codigo aqui...

        public static ColeccionIntervenciones FindAll()
        {
            //return DataBase.Current.Load<ColeccionIntervenciones, Intervenciones>(Tables.Intervenciones);
            Intervenciones i;
            DataTable dt;
            ColeccionIntervenciones iM = new ColeccionIntervenciones();
            ParameterManager parameters = new ParameterManager();
            
            //  dt = DataBase.Current.ExecuteSQL("Select prest.IdPrestacion, prest.NumeroDePrestacion, prest.Detalle, p2o.NombreObra, p2o.precio from Prestaciones as prest, Prestaciones_ObraSocial as p2o where p2o.idprestacion = prest.IdPrestacion");
            dt = DataBase.Current.ExecuteSQL("Select  * from Intervenciones Order By IDIntervencion");
            foreach (DataRow dr in dt.Rows)
            {
                i = LoadRowFind(dr);
                iM.Add(i);
            }

            return iM;
        }
        /// <summary>
        /// Listar intervenciones
        /// </summary>
        /// <param name="pApellido"></param>
        public static ColeccionIntervenciones LoadObraSocial(string nombreObra,string apellido,string paciente,string estado,string abonada,DateTime fechaIn,DateTime fechaEn, bool refacturacion)
        {
            DateTime fechaLiqIn=DateTime.Parse("01/01/1900 00:00:00");
            DateTime fechaLiqEn = DateTime.Now;
            ColeccionIntervenciones i;
            i = ListarIntervenciones(nombreObra, apellido, paciente, estado, abonada, fechaIn, fechaEn, fechaLiqIn, fechaLiqEn, refacturacion);
            return i;
                      

        }
        public static ColeccionIntervenciones LoadObraSocial(string nombreObra, string apellido,string paciente, string estado, string abonada, DateTime fechaIn, DateTime fechaEn,DateTime fechaLiqIn,DateTime fechaLiqEn, bool refacturacion)
        {
            ColeccionIntervenciones i;
            i=ListarIntervenciones(nombreObra, apellido,paciente,estado, abonada, fechaIn, fechaEn, fechaLiqIn, fechaLiqEn,refacturacion);
            return i;
        }
        private static ColeccionIntervenciones ListarIntervenciones(string nombreObra, string apellido,string paciente, string estado, string abonada, DateTime fechaIn, DateTime fechaEn, DateTime fechaLiqIn, DateTime fechaLiqEn, bool refacturacion)
        {

            string fechaIni = fechaIn.ToString("yyyy/MM/dd");
            string fechaEnd = fechaEn.ToString("yyyy/MM/dd");
            string fechaLiqIni = fechaLiqIn.ToString("yyyy/MM/dd");
            string fechaLiqEnd = fechaLiqEn.ToString("yyyy/MM/dd");
            Intervenciones i;
            DataTable dt;
            ColeccionIntervenciones iM = new ColeccionIntervenciones();


            int abo = 0;
            int aux = 0;             


            switch (abonada)
            {
                case "Si":
                    abo = -1;
                    aux = -1;
                    break;
                case "No":
                    abo = 0;
                    aux = 0;
                    break;
                case "Ambas":
                    abo = 0;
                    aux = -1;
                    break;
                default:
                    abo = 0;
                    aux = -1;
                    break;

            }
            if (estado == "Ambas")
            {
                estado = "";
            }
            //if I dont want to search by fechaLiq
            if (fechaLiqIni == "1900/01/01")
            {
               // dt = DataBase.Current.ExecuteSQL("SELECT Intervenciones.NombreObra,Intervenciones.Matricula,Profesionales.Apellido,Profesionales.Nombre,Pacientes.Apellido,Pacientes.Nombre,Pacientes.NumeroAfiliado,Prestaciones.IdPrestacion,Intervenciones.Elemento,Intervenciones.Cara,Intervenciones.Arancel,Estado,Abonada,Intervenciones.Fecha,Intervenciones.Detalle,Intervenciones.IdIntervencion FROM Intervenciones,Profesionales,Prestaciones,Pacientes,ObrasSociales,Prestaciones_ObraSocial WHERE ObrasSociales.NombreObra=Intervenciones.NombreObra AND Intervenciones.NombreObra like '%" + nombreObra + "%' AND Profesionales.Apellido like '%" + apellido + "%' AND Profesionales.Matricula=Intervenciones.Matricula AND Pacientes.NumeroAfiliado=Intervenciones.NumeroAfiliado AND Prestaciones.IdPrestacion=Intervenciones.IdPrestacion AND Intervenciones.Fecha Between  #" + fechaIni + "# AND #" + fechaEnd + "# AND Prestaciones.IdPrestacion=Prestaciones_ObraSocial.IdPrestacion AND Prestaciones_ObraSocial.NombreObra=ObrasSociales.NombreObra AND Intervenciones.Estado like '%" + estado + "%'AND Intervenciones.Abonada IN ( " + abo + " , " + aux + " )AND Pacientes.Apellido like '%" + paciente + "%'AND Intervenciones.Activa='true' AND Intervenciones.Refacturacion ='" + refacturacion + "' ORDER BY Intervenciones.Matricula,Intervenciones.NumeroAfiliado");
                dt = DataBase.Current.ExecuteSQL("SELECT Intervenciones.NombreObra,Intervenciones.Matricula,Profesionales.Apellido,Profesionales.Nombre,Pacientes.Apellido,Pacientes.Nombre,Pacientes.NumeroAfiliado,Prestaciones.IdPrestacion,Intervenciones.Elemento,Intervenciones.Cara,Intervenciones.Arancel,Estado,Abonada,Intervenciones.Fecha,Intervenciones.Detalle,Intervenciones.IdIntervencion FROM Intervenciones,Profesionales,Prestaciones,Pacientes,ObrasSociales,Prestaciones_ObraSocial WHERE ObrasSociales.NombreObra=Intervenciones.NombreObra AND Intervenciones.NombreObra like '%" + nombreObra + "%' AND Profesionales.Apellido like '%" + apellido + "%' AND Profesionales.Matricula=Intervenciones.Matricula AND Pacientes.NumeroAfiliado=Intervenciones.NumeroAfiliado AND Prestaciones.IdPrestacion=Intervenciones.IdPrestacion AND  Prestaciones.IdPrestacion=Prestaciones_ObraSocial.IdPrestacion AND Prestaciones_ObraSocial.NombreObra=ObrasSociales.NombreObra AND Intervenciones.Estado like '%" + estado + "%'AND Intervenciones.Abonada IN ( " + abo + " , " + aux + " )AND Pacientes.NumeroAfiliado = '032244704' AND Intervenciones.Activa='true' AND Intervenciones.Refacturacion ='" + refacturacion + "' ORDER BY Intervenciones.Matricula,Intervenciones.NumeroAfiliado");
            }
            else
            {
                dt = DataBase.Current.ExecuteSQL("SELECT Intervenciones.NombreObra,Intervenciones.Matricula,Profesionales.Apellido,Profesionales.Nombre,Pacientes.Apellido,Pacientes.Nombre,Pacientes.NumeroAfiliado,Prestaciones.IdPrestacion,Intervenciones.Elemento,Intervenciones.Cara,Intervenciones.Arancel,Estado,Abonada,Intervenciones.Fecha,Intervenciones.Detalle,Intervenciones.IdIntervencion FROM Intervenciones,Profesionales,Prestaciones,Pacientes,ObrasSociales,Prestaciones_ObraSocial WHERE ObrasSociales.NombreObra=Intervenciones.NombreObra AND Intervenciones.NombreObra like '%" + nombreObra + "%' AND Profesionales.Apellido like '%" + apellido + "%' AND Profesionales.Matricula=Intervenciones.Matricula AND Pacientes.NumeroAfiliado=Intervenciones.NumeroAfiliado AND Prestaciones.IdPrestacion=Intervenciones.IdPrestacion AND Intervenciones.Fecha Between  #" + fechaIni + "# AND #" + fechaEnd + "# AND Prestaciones.IdPrestacion=Prestaciones_ObraSocial.IdPrestacion AND Prestaciones_ObraSocial.NombreObra=ObrasSociales.NombreObra AND Intervenciones.Estado like '%" + estado + "%'AND Intervenciones.Abonada IN ( " + abo + " , " + aux + " )AND Intervenciones.FechaLiquidacion Between  #" + fechaLiqIni + "# AND #" + fechaLiqEnd + "# AND Pacientes.Apellido like '%" + paciente + "%' AND Intervenciones.Activa='true' AND Intervenciones.Refacturacion ='" + refacturacion + "' ORDER BY Intervenciones.Matricula,Intervenciones.NumeroAfiliado");
               
            }
            foreach (DataRow dr in dt.Rows)
            {
                i = LoadRow(dr);
                iM.Add(i);
            }

            return iM;
        
        
        
        }

        public static ColeccionIntervenciones  CargarParaLiquidar(string  pMatricula){
            Intervenciones i;
            DataTable dt;
            ColeccionIntervenciones iM = new ColeccionIntervenciones();
            dt = DataBase.Current.ExecuteSQL("SELECT  * from intervenciones where matricula = " + pMatricula +" and abonada = 0 and Estado = 'Aceptada'");
            foreach (DataRow dr in dt.Rows)
            {
                i = LoadRowInt(dr);
                iM.Add(i);
            }

            return iM;
        }

        public Double getTotal() {
            Double monto = 0;
            if (this.Count > 0)
            {
                Double porc = 0;
                Profesionales p;
                p = ColeccionProfesionales.Current.GetByMatricula(this[0].Matricula.ToString())[0];
                foreach (var item in this)
                {
                    monto += ColeccionObrasSociales.Current.GetByNombre(item.NombreObraSocial).PrecioPrestaciones.FindById(item.IdPrestacion).Precio;
                    //monto += double.Parse(item.Arancel);
                }
                DataTable dt = DataBase.Current.ExecuteSQL("select * from cuota");
                porc = Double.Parse(dt.Rows[0][0].ToString());
                monto = monto - (monto * porc / 100);
            }
            return monto;
        }

        public void LiquidarIntervenciones() {

            Double monto = 0;
            Double porc = 0;
            Profesionales p;
            p = ColeccionProfesionales.Current.GetByMatricula(this[0].Matricula.ToString() )[0];
            foreach (var item in this)
            {
               // monto += double.Parse(item.Arancel);
                monto += ColeccionObrasSociales.Current.GetByNombre(item.NombreObraSocial).PrecioPrestaciones.FindById(item.IdPrestacion).Precio; 

            }

            DataTable dt = DataBase.Current.ExecuteSQL("select * from cuota");
            porc = Double.Parse(dt.Rows[0][0].ToString());

            Movimiento  m = new Movimiento();
            m.Concepto = "Cobro por Intervenciones " + DateTime.Now.ToString("MMMM yyyy");
            m.Fecha = DateTime.Now;
            m.Monto = monto - (monto * porc / 100);
            m.Profesional = p;
            m.Save();


        }
        private static Intervenciones LoadRowInt(DataRow r)
        {
            Intervenciones i = null;
            if (r != null)
            {

                i = new Intervenciones();
                i.NombreObraSocial = r["NombreObra"].ToString();
                i.Matricula = Int32.Parse(r["Matricula"].ToString());                              
                i.NumeroAfiliado = r["NumeroAfiliado"].ToString();
                i.IdPrestacion = Int32.Parse(r["IdPrestacion"].ToString());
                i.Elemento = r["Elemento"].ToString();
                i.Cara = r["Cara"].ToString();                
                i.Abonada = r["Abonada"].ToString();
                i.Estado = r["Estado"].ToString();
                i.Fecha = r["Fecha"].ToString();                
                i.IdIntervencion = Int32.Parse(r["IdIntervencion"].ToString());
                i.Arancel = Double.Parse(r["Arancel"].ToString()); 



            }
            return i;
        }
        public static ColeccionIntervenciones mCurrent;

        public static ColeccionIntervenciones Current
        {
            get
            {
                if (mCurrent == null)
                {

                    mCurrent = ColeccionIntervenciones.FindAll();
                }
                return mCurrent;
            }
            set { mCurrent = value; }

        }
        private static Intervenciones LoadRow(DataRow r)
        {
            Intervenciones i = null;
            if (r != null)
            {

                i = new Intervenciones();
                i.NombreObraSocial = r["NombreObra"].ToString();
                i.Matricula = Int32.Parse(r["Matricula"].ToString());
                i.Nombre = r["Profesionales.Nombre"].ToString();
                i.Apellido = r["Profesionales.Apellido"].ToString();
                i.NombreAfiliado = r["Pacientes.Nombre"].ToString();
                i.ApellidoAfiliado = r["Pacientes.Apellido"].ToString();
                i.NumeroAfiliado = r["NumeroAfiliado"].ToString();
                i.IdPrestacion = Int32.Parse(r["IdPrestacion"].ToString());
                i.Elemento = r["Elemento"].ToString();
                i.Cara = r["Cara"].ToString();
                i.Arancel = Double.Parse( r["Arancel"].ToString());
                i.Abonada = r["Abonada"].ToString();
                i.Estado = r["Estado"].ToString();
                i.Fecha = r["Fecha"].ToString();
                i.Detalle = r["Detalle"].ToString();
                i.IdIntervencion = Int32.Parse(r["IdIntervencion"].ToString());

                

            }
            return i;
        }
        private static Intervenciones LoadRowFind(DataRow r)
        {
            Intervenciones i = null;
            if (r != null)
            {

                i = new Intervenciones();
                i.NombreObraSocial = r["NombreObra"].ToString();
                i.Matricula = Int32.Parse(r["Matricula"].ToString());
                i.NumeroAfiliado = r["NumeroAfiliado"].ToString();
                i.IdPrestacion = Int32.Parse(r["IdPrestacion"].ToString());
                i.Elemento = r["Elemento"].ToString();
                i.Cara = r["Cara"].ToString();
                i.Abonada = r["Abonada"].ToString();
                i.Estado = r["Estado"].ToString();
                i.Fecha = r["Fecha"].ToString();
                i.Detalle = r["Detalle"].ToString();
                i.IdIntervencion = Int32.Parse(r["IdIntervencion"].ToString());



            }
            return i;
        }

        public static void UpdateObra(int matricula, string numeroAfiliado,int idPrestacion,string elemento,string cara,string estado,string liquidada,DateTime fecha,string detalle,int idIntervencion)
        {
            int abonada = 0;
            if(liquidada=="Si")
            {
                abonada = -1;
            }
            ParameterManager pM = new ParameterManager();
            pM.Add(new Parameter("IdIntervencion", idIntervencion, true));
            pM.Add(new Parameter("Matricula", matricula));
            pM.Add(new Parameter("NumeroAfiliado", numeroAfiliado));
            pM.Add(new Parameter("IdPrestacion", idPrestacion));
            pM.Add(new Parameter("Elemento", elemento)); 
            pM.Add(new Parameter("Cara", cara));
            pM.Add(new Parameter("Abonada", abonada));
            pM.Add(new Parameter("Estado", estado));
            pM.Add(new Parameter("Fecha", fecha));
            pM.Add(new Parameter("Detalle", detalle));
            DataBase.Current.Update(Tables.Intervenciones, pM);
           

        }

        public static void UpdateIntervencionLiquidada(string nombreObra, int matricula, string numeroAfiliado, int idPrestacion, string elemento, string cara, string estado, string liquidada, DateTime fecha, string detalle, int idIntervencion, int idLiquidacion,DateTime fechaLiq)
        {
            int abonada = 0;
            if (liquidada == "Si")
            {
                abonada = -1;
            }
            ParameterManager pM = new ParameterManager();
            pM.Add(new Parameter("IdIntervencion", idIntervencion, true));
            pM.Add(new Parameter("Matricula", matricula));
            pM.Add(new Parameter("NumeroAfiliado", numeroAfiliado));
            pM.Add(new Parameter("IdPrestacion", idPrestacion));
            pM.Add(new Parameter("Elemento", elemento));
            pM.Add(new Parameter("Cara", cara));
            pM.Add(new Parameter("NombreObra", nombreObra));
            pM.Add(new Parameter("Abonada", abonada));
            pM.Add(new Parameter("Estado", estado));
            pM.Add(new Parameter("Fecha", fecha));
            pM.Add(new Parameter("Detalle", detalle));
            pM.Add(new Parameter("idLiquidacion", idLiquidacion));
            pM.Add(new Parameter("FechaLiquidacion", fechaLiq));
            DataBase.Current.Update(Tables.Intervenciones, pM);


        }
        public static int calcTotal(int matricula)
        {
            int sum = 0;
        DataTable dt;
        dt = DataBase.Current.ExecuteSQL("SELECT SUM(Intervenciones.Arancel)AS SUMA FROM Intervenciones,Prestaciones_ObraSocial,Prestaciones WHERE Intervenciones.Matricula="+matricula+"  AND Prestaciones.IdPrestacion=Intervenciones.IdPrestacion AND Prestaciones_ObraSocial.NombreObra=Intervenciones.NombreObra AND Prestaciones_ObraSocial.IdPrestacion=Prestaciones.IdPrestacion");
         foreach (DataRow dr in dt.Rows)
                        {
                            sum =Int32.Parse(dr.ItemArray[0].ToString());

                        }
         return sum;
        
        }

        public static void DeleteRow(string nombreObra, int matricula, string numeroAfiliado, int idPrestacion, string elemento, string cara, string estado, string liquidada, DateTime fecha, string detalle, int idIntervencion,string activa)
        {
            int abonada = 0;
            if (liquidada == "Si")
            {
                abonada = -1;
            }
            ParameterManager pM = new ParameterManager();
            pM.Add(new Parameter("IdIntervencion", idIntervencion, true));
            pM.Add(new Parameter("Matricula", matricula));
            pM.Add(new Parameter("NumeroAfiliado", numeroAfiliado));
            pM.Add(new Parameter("IdPrestacion", idPrestacion));
            pM.Add(new Parameter("Elemento", elemento));
            pM.Add(new Parameter("Cara", cara));
            pM.Add(new Parameter("NombreObra", nombreObra));
            pM.Add(new Parameter("Abonada", abonada));
            pM.Add(new Parameter("Estado", estado));
            pM.Add(new Parameter("Fecha", fecha));
            pM.Add(new Parameter("Detalle", detalle));
            pM.Add(new Parameter("Activa",activa));
            DataBase.Current.Update(Tables.Intervenciones, pM);
            
        }

        
        public Intervenciones FindByID(int i)
        {
       
            foreach (var item in this)
            {
                if (item.IdIntervencion == i)
                {
                    return item;
                }
            }
            return null;

        }
        public Intervenciones FindByMat(int i)
        {
            

            foreach (var item in this)
            {
                if (item.Matricula == i)
                {
                    return item;
                }
            }
            return null;

        }

        public Intervenciones FindByNumAf(string p)
        {
            foreach (var item in this)
            {
                if (item.NumeroAfiliado == p)
                {
                    return item;
                }
            }
            return null;
        }

        public Intervenciones FindByIdPrest(int p)
        {
            foreach (var item in this)
            {
                if (item.IdPrestacion == p)
                {
                    return item;
                }
            }
            return null;
        }
      
    }
}